//
//  RDConfigEventListener.h
//  RDelivery
//
//  Created by selmerzhang on 2021/12/31.
//  Copyright © 2021 Tencent. All rights reserved.
//

#ifndef RDConfigEventListener_h
#define RDConfigEventListener_h

@class RDConfigInfo;

NS_ASSUME_NONNULL_BEGIN

/// 配置事件监听者协议
@protocol RDConfigEventListener <NSObject>

@optional

/// 监听获取配置值事件，在业务主动读取配置key时回调，每个key仅回调一次
/// @param key 配置key
/// @param configInfo 配置信息
/// @param isNeedReport 是否需要上报
- (void)onGetConfigInfoInvoked:(NSString *)key configInfo:(RDConfigInfo * _Nullable)configInfo needReport:(BOOL)isNeedReport;

/// 监听配置改变事件
/// 在配置有更新时回调
/// @param keyArray 有更新的配置key的数组
- (void)onConfigChanged:(NSArray<NSString *> *)keyArray;

/// 监听的配置初始化加载缓存完成，用于在启动时就需要读取配置的业务
- (void)onConfigInfoInited;

/// 监听全量拉取完成的回调
/// 注意：任何场景下出发的全量请求都会触发此回调，包括手动触发和自动触发（启动、定时、进前台、网络重联）
/// @param error 请求灰度错误处理
- (void)onConfigRequestPullTypeAllFinished:(NSError *)error;

/// 全量配置回包处理完成
/// @param error 报错
- (void)onConfigPullTypeAllProcessFinished:(NSError *)error;

/// 此接口为兼容TAB而增加，建议业务不使用该接口
/// 监听拉取配置数据网络请求回包的回调，在请求回包时立刻回调，此时配置未更新
/// @param error 请求回调错误信息
- (void)onConfigRequestFinished:(NSError *)error;

@end

NS_ASSUME_NONNULL_END


#endif /* RDConfigEventListener_h */
